<?php

/**
 * SmartPHP framework
 *
 * @name SmartPHP framework
 * @package SmartPHP
 * @author 费尔 <admin@xuai.cn>
 * @version 3.0
 * @link http://www.SmartPHP.cn
 * @copyright SmartPHP.cn
 * @license <a href="http://www.SmartPHP.cn">SmartPHP</a>
 */

namespace Base;

/**
 * 项目日志
 *
 * @author 费尔 <admin@xuai.cn>
 */
class Log {

    // 日志信息
    public static $log = [];
    // 日志类型
    public static $type = ['log', 'error', 'info', 'sql', 'notice', 'alert'];

    /**
     * 初始化驱动
     */
    private static function _init($driver = NULL) {
        static $_log;
        $class = '\\Driver\\Log\\' . ucfirst(strtolower($driver ?: Config::get('log.type')));
        return $_log[$driver] ?? ($_log[$driver] = new $class());
    }

    /**
     * 保存调试信息
     * @return bool
     */
    public static function save() {
        $log = [];
        $haystack = explode(',', Config::get('log.save'));
        foreach (self::$log as $key => $value) {
            if (in_array($key, $haystack)) {
                foreach ($value as $vo) {
                    $log[] = '[' . $key . ']' . $vo;
                }
            }
        }
        Config::get('log.switch') && self::_init()->save($log);
    }

    /**
     * 记录调试信息
     * @param mixed  $msg  调试信息
     * @param string $type 信息类型
     * @return void
     */
    public static function record($msg, $type = 'log') {
        in_array($type, self::$type) && self::$log[$type][] = $msg;
    }

    /**
     * 记录日志信息
     * @param mixed  $msg  调试信息
     * @return void
     */
    public static function log($msg) {
        self::record($msg, 'log');
    }

    /**
     * 记录错误信息
     * @param mixed  $msg  调试信息
     * @return void
     */
    public static function error($msg) {
        self::record($msg, 'error');
    }

    /**
     * 记录信息
     * @param mixed  $msg  调试信息
     * @return void
     */
    public static function info($msg) {
        self::record($msg, 'info');
    }

    /**
     * 记录SQL信息
     * @param mixed  $msg  调试信息
     * @return void
     */
    public static function sql($msg) {
        self::record($msg, 'sql');
    }

    /**
     * 记录注意信息
     * @param mixed  $msg  调试信息
     * @return void
     */
    public static function notice($msg) {
        self::record($msg, 'notice');
    }

    /**
     * 记录警报信息
     * @param mixed  $msg  调试信息
     * @return void
     */
    public static function alert($msg) {
        self::record($msg, 'log');
    }

}
